<?php
// requêtes AJAX de l'interface d'admin traitées par $_REQUEST['action']

session_start();
chdir('..'); // racine du site

$admin_status = array('ADMIN', 'MODERATOR');
if (isset($_SESSION['status_code']) && in_array($_SESSION['status_code'], $admin_status)) {

	require_once('lib/utils.php');
	require_once('lib/mysql.php');
	require_once('lib/constants.php');
	require_once('lib/post.php');
	require_once('lib/menu.php');
	require_once('lib/content.php');
	require_once('lib/member.php');
	require_once('lib/photo.php');
	require_once('lib/video.php');

	sql_connect();

	switch ($_REQUEST['action']) {

		/* Adhérents ------------------------------- */

		case 'member_details':
			include_once('adherents/details.php');
			break;

		case 'member_valider':
			if(member_valid_registration($_GET['id'])) echo 'ok&&&validated';
			else echo 'notok&&&notvalidated';
			break;

		case 'member_delete':
			if (!member_delete($_GET['id'])) ajax_error();
			break;

		case 'member_cancel_registration':
			member_cancel_registration($_GET['id']);
			echo 'ok&&&';
			break;

		case 'member_cancel_account':
			if (!member_update_status($_GET['id'], 'CANCELED')) ajax_error();
			break;

		case 'member_set_medical_certificate':
			if (!member_set_medical_certificate($_GET['id'])) ajax_error();
			break;

		case 'member_unset_medical_certificate':
			if (!member_unset_medical_certificate($_GET['id'])) ajax_error();
			break;

		case 'member_set_registration_check':
			if (!member_set_registration_check($_GET['id'])) ajax_error();
			break;

		case 'member_unset_registration_check':
			if (!member_unset_registration_check($_GET['id'])) ajax_error();
			break;

		/* Rédaction ------------------------------- */

		case 'content_delete':
			$menu = menu_get_by_id(content_get_menu($_GET['id']));

			content_delete($_GET['id']);

			if($menu['id'] != '') {
				menu_set_unused($menu['id']);
				if(!menu_has_active_child($menu['idMenu'])) {
					menu_set_unused($menu['idMenu']);
				}
			}
			echo 'ok&&&';
			break;

		case 'content_details':
			$content = content_get_by_id($_GET['id']);

			$result = '<p class="highlight"><strong>Texte : </strong></p><div>'.html_entity_decode($content['text']).'</div>';

			$result  = 'ok&&&'.$result;
			echo $result;
			break;

		case 'content_add':
			$errors = array();
			$result = '';

			$id = clean_str($_POST['id']);
			$title = mysql_real_escape_string(clean_str($_POST['title']));
			$content = mysql_real_escape_string(clean_str($_POST['content']));
			$idmenu = intval($_POST['idmenu']);

			if(!content_valid_id($id)) $errors[] = 'Vous devez donner un identifiant allant de 3 à 32 caractères parmis a-z A-Z 0-9 et _';
			if(content_exist($id)) $errors[] = 'L\'identifiant que vous avez spécifié est déjà utilisé pour un autre contenu, veuillez en choisir un autre';
			if($title == '') $errors[] = 'Vous devez spécifier un titre';
			if($content == '') $errors[] = 'Vous ne pouvez pas enregistrer un contenu sans texte';

			if(!empty($errors)) {
				$result  = 'errors&&&'.$idmenu.'&&&';
				$result .= '<p class="error">Merci de corriger les erreurs suivantes</p>';
				foreach($errors as $error) $result .= '<span class="list">'.$error.'</span>';
			}
			else {
				content_add($id, $title, $content, $idmenu);

				// mise à jour du champs "used"
				if($idmenu != -1) {
					$bloc = menu_get_idmenu($idmenu);
					if(!menu_is_used($bloc))
						menu_set_used($bloc);

					menu_set_used($idmenu);
					menu_set_link($idmenu, 'adrenaline-'.$id.'.html');
				}
				$result  = 'ok&&&'.$idmenu.'&&&';
				$result .= '<p class="success">Le contenu a été ajouté avec succès !</p>';
			}

			echo $result;
			break;

		case 'content_update':
			$errors = array();
			$result = '';

			$id = clean_str($_POST['id']);
			$old_id = clean_str($_POST['old_id']);
			$title = mysql_real_escape_string(clean_str($_POST['title']));
			$content = mysql_real_escape_string(clean_str($_POST['content']));
			$idmenu = intval($_POST['idmenu']);
			$old_menu = intval($_POST['old_menu']);

			if(!content_valid_id($id)) $errors[] = 'Vous devez donner un identifiant allant de 3 à 32 caractères parmis a-z A-Z 0-9 et _';
			if($id != $old_id && content_exist($id)) $errors[] = 'L\'identifiant que vous avez spécifié est déjà utilisé pour un autre contenu, veuillez en choisir un autre';
			if($title == '') $errors[] = 'Vous devez spécifier un titre';
			if($content == '') $errors[] = 'Vous ne pouvez pas enregistrer un contenu sans texte';

			if(!empty($errors)) {
				$result  = 'errors&&&'.$idmenu.'&&&';
				$result .= '<p class="error">Merci de corriger les erreurs suivantes</p>';
				foreach($errors as $error) $result .= '<span class="list">'.$error.'</span>';
			}
			else {
				content_update($old_id, $id, $title, $content, $idmenu);

				// mise à jour du champs "used"
				if($idmenu != $old_menu) {
					if($idmenu == -1) {
						menu_set_unused($old_menu);

						$o_menu = menu_get_by_id($old_menu);
						if(!menu_has_active_child($o_menu['idMenu']))
							menu_set_unused($o_menu['idMenu']);
					}
					elseif($old_menu == -1) {
						menu_set_link($idmenu, 'adrenaline-'.$id.'.html');
						menu_set_used($idmenu);

						$n_menu = menu_get_by_id($idmenu);
						$o_menu = menu_get_by_id($old_menu);
						if(!menu_is_used($n_menu['idMenu']))
							menu_set_used($n_menu['idMenu']);
					}
					else {
						menu_set_link($idmenu, 'adrenaline-'.$id.'.html');

						menu_update_used($idmenu, $old_menu);
						$n_menu = menu_get_by_id($idmenu);
						$o_menu = menu_get_by_id($old_menu);
						if(!menu_is_used($n_menu['idMenu']))
							menu_set_used($n_menu['idMenu']);
						if(!menu_has_active_child($o_menu['idMenu']))
							menu_set_unused($o_menu['idMenu']);
					}
				}

				// mise à jour du champs "link"
				if($id != $old_id) {
					menu_set_link($idmenu, 'adrenaline-'.$id.'.html');
				}

				$result = 'ok&&&'.$idmenu.'&&&';
				$result .= '<p class="success">Le contenu a été modifié avec succès !</p>';
			}

			echo $result;
			break;

		case 'post_delete':
			post_delete($_GET['id']);
			news_feed_rss();
			echo 'ok&&&';
			break;

		case 'mailgroup_send':
			if(isset($_POST['status']) && $_POST['status'][0] && $_POST['content'] != '' && $_POST['subject'] != '') {
				if($_POST['status'][0] == 1) {
					$members = member_get_by_id($_SESSION['id'], false); // false pour ne pas récupérer les données déjà "fetchées"
				}
				else {
					$flag = 0;
					foreach($_POST['status'] as $status) {
						switch ($status) {
							case 'ADMIN':
								$flag |= ADMIN;
								break;
							case 'MODERATOR':
								$flag |= MODO;
								break;
							case 'MEMBER':
								$flag |= MEMBER;
								break;
							case 'WAITING_MEMBER':
								$flag |= MEMBER_WAITING;
								break;
							case 'CANCELED':
								$flag |= MEMBER_CANCELED;
								break;
							case 'OLD_MEMBER':
								$flag |= MEMBER_OLD;
								break;
						}
					}
					$members = member_get_list($flag, 'email');
				}
				if (mysql_num_rows($members)) {
					$prev_mail = '';
					$content = clean_str_preserve_tags($_POST['content']);
					$content = str_replace(array('<p>','</p>','<p>&nbsp;</p>'), array('<span>','</span><br />','<br />'), $content);
					while($row = mysql_fetch_assoc($members)) {
						if($row['email'] != $prev_mail)
							xmail($row['email'], clean_str($_POST['subject']), $content);

						$prev_mail = $row['email'];
					}
					echo 'ok&&&<p class="success">Le mail a été envoyé à tous les membres des catégories séléctionnées</p>';
				}
				else {
					echo 'ok&&&<p class="info">Il n\'y a aucun membre pour les catégories séléctionnées</p>';
				}
			}
			elseif($_POST['subject'] == '') {
				echo 'ok&&&<p class="warning">Le mail n\'a pas été envoyé car il ne contenait pas de sujet</p>';
			}
			elseif($_POST['content'] == '') {
				echo 'ok&&&<p class="warning">Le mail n\'a pas été envoyé car il ne contenait aucun texte</p>';
			}
			else {
				echo 'ok&&&<p class="warning">Aucune catégorie n\'est séléctionnée, aucun mail n\'a été envoyé</p>';
			}
			break;


		/* Menus ----------------------------------- */

		case 'menubloc_delete':
			$id = intval($_GET['id']);
			$idmenu = intval($_GET['idmenu']);

			// mise à jour de l'idmenu du contenu lié si c'est un menu
			$content = content_get_by_menu($id);
			if(!empty($content))
				content_set_menu($content['id'], -1);

			menu_bloc_delete($id, $idmenu);

			echo 'ok&&&';
			break;

		case 'menu_add':
			$name = clean_str($_GET['name']);
			$idmenu = intval($_GET['idmenu']);

			if($name == '') {
				echo 'errors&&&<p class="error">Vous devez préciser un nom pour le menu</p>';
			}
			else {
				menu_add($name, $idmenu);
				echo 'ok&&&<p class="success">Menu ajouté avec succès</p>';
			}
			break;

		case 'bloc_add':
			$name = clean_str($_GET['name']);
			$image = clean_str($_GET['image']);

			if($name == '' || $image == '') {
				echo 'errors&&&<p class="error">Vous devez préciser un nom et choisir une icone pour le bloc</p>';
			}
			else {
				menu_bloc_add($name, $image);
				echo 'ok&&&<p class="success">Bloc ajouté avec succès</p>';
			}
			break;

		case 'menu_update_name':
			$new_name = clean_str($_GET['new_menu_name']);
			$id = intval($_GET['id']);

			if($new_name == '')
				echo 'fail';
			else {
				menu_set_name($id, $new_name);
				echo 'ok&&&';
			}
			break;

		case 'menu_update_position':
			$sections = $_GET['sections'];
			$menus = $_GET['menus'];

			for($i=0 ; $i < count($sections) ; ++$i)
				menu_update_position($sections[$i], $i+1);

			for($i=0 ; $i < count($menus) ; ++$i) {
				// $menu[0] contient l'id du menu et $menu[1] contient sa section
				$menu = explode('sec', $menus[$i]);
				menu_update_position($menu[0], $i+1, $menu[1]);
			}

			echo 'ok&&&';
			break;


		/* Média ----------------------------------- */

		case 'video_delete':
			video_delete($_GET['id']);
			break;

		case 'gallery_delete':
			$gallery = clean_str($_GET['gallery']);
			$count = count(photo_list($gallery));
			echo photo_gallery_delete($gallery) ? 'ok&&&'.$count : 'fail';
			break;

		case 'photo_delete':
			if (!photo_delete(clean_str($_GET['gallery']), clean_str($_GET['photo']))) ajax_error();
			break;

		case 'photo_update_name':
			if (!photo_rename($_POST['gallery_name'], $_POST['old_pic_name'], $_POST['new_pic_name'])) ajax_error();
			break;


		/* Le Club --------------------------------- */

		case 'tariff_delete':
			require_once('lib/tariff.php');
			tariff_delete($_GET['id']);
			echo 'ok';
			break;

		case 'link_delete':
			require_once('lib/link.php');
			link_delete($_GET['id']);
			echo 'ok';
			break;

		case 'event_delete':
			require_once('lib/event.php');
			event_delete($_GET['id']);
			echo 'ok';
			break;

		case 'admin_add':
			$name = clean_str($_GET['name']);
			$firstname = clean_str($_GET['firstname']);
			$mail = clean_str($_GET['mail']);
			$mdp = clean_str($_GET['mdp']);
			$status = $_GET['status'];

			if(!valid_email($mail))
				echo 'error&&&<p class="error">Le mail n\'est pas valide</p>';
			elseif(member_email_exists($mail))
				echo 'error&&&<p class="error">Ce mail est déjà utilisé pour un autre membre</p>';
			elseif(!valid_pass($mdp))
				echo 'error&&&<p class="error">Le mot de passe est invalide (min. 6 caractères)</p>';
			else {
				member_admin_add($name, $firstname, $mail, $mdp, $status);
				echo 'ok&&&';
			}
			break;

		case 'admin_delete':
			if(member_delete($_GET['id']))
				echo 'ok&&&';
			else
				echo 'fail&&&<p class="error">Erreur lors de la suppression</p>';
			break;

		case 'admin_update_status':
			$id = intval($_GET['id']);
			$new_status = clean_str($_GET['status']);

			if(member_update_status($id, $new_status))
				echo 'ok&&&';
			else
				echo 'fail&&&';
			break;


		/* Paramètres --------------------------------- */

		case 'param_get_edit_infos':
			require_once('lib/appparam.php');
			if(appparam_exists($_GET['key'])) {
				$param = appparam_get($_GET['key']);
				$json = array('key' => $param['key'], 'value' => $param['value'], 'type' => $param['type']);
				die(json_encode($json)); // Retourne l'array au format JSON
			}
			else
				ajax_error('Specified param key doesn\'t exists');
			break;

		case 'param_edit':
			require_once('lib/appparam.php');
			if(appparam_exists($_POST['key'])) {
				if(appparam_edit($_POST['key'], clean_str_preserve_tags($_POST['value']))) die('Ok');
				else ajax_error('Error while updating parameter');
			}
			else
				ajax_error('Specified param key doesn\'t exists');
			break;


		/* Agenda --------------------------------- */

		case 'agenda_add':
			require_once('lib/agenda.php');
			if(agenda_add($_GET['date']/1000, clean_str($_GET['content']), $_GET['icon']))
				echo '<p class="success">Entrée ajoutée avec succès</p>';
			else
				ajax_error('Erreur lors de l\'ajout en base');
			break;

		case 'agenda_delete':
			require_once('lib/agenda.php');
			if(agenda_delete($_GET['id']))
				echo '<p class="success">Entrée supprimée avec succès</p>';
			else
				ajax_error('Erreur lors de la suppression en base');
			break;


		/* Si l'action n'est pas trouvée ----------- */

		default:
			ajax_error('unknown action');
	}
}
else {
	require_once('lib/utils.php');
	ajax_error('forbidden request');
}
